package com.ganwei.mybatisplus.system.pojo;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class Users implements Serializable {

    /**
     * 对应数据库的主键 uuid ，自增
     *
     * SnowFlake 算法，是 Twitter 开源的分布式 id 生成算法。其核心思想就是：
     * 使用一个 64 bit 的 long 型的数字作为全局唯一 id。
     * 在分布式系统中的应用十分广泛，且ID 引入了时间戳，基本上保持自增的，后面的代码中有详细的注解。
     *
     * 这 64 个 bit 中，其中 1 个 bit 是不用的，然后用其中的 41 bit 作为毫秒数，
     * 用 10 bit 作为工作机器 id，12 bit 作为序列号。
     *
     *    AUTO(0),  主键自增  数据库一定要是自增的
     *     NONE(1), 未设置主键
     *     INPUT(2),  手动输入  一旦设置为手动输入，我们必须手动输入id
     *     ID_WORKER(3),  默认的全局id
     *     UUID(4),  全局唯一id
     *     ID_WORKER_STR(5);  ID_WORKER的字符串
     */
    @TableId(type = IdType.ID_WORKER)
    private Long id;

    @Excel(name = "用户姓名")
    private String username;

    @Excel(name = "用户密码")
    private String password;

    @Excel(name = "标识")
    private String perms;

    //字段添加填充内容
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @Excel(name = "创建时间")
    private Date createTime;


    /**
     *  DEFAULT, 默认
     *     INSERT,新增时插入
     *     UPDATE,修改时插入
     *     INSERT_UPDATE;插入和修改时插入
     */
    @TableField(fill = FieldFill.UPDATE)
    @Excel(name = "修改时间")
    private Date updateTime;


    @Version //乐观锁注解
    @Excel(name = "版本号")
    private Integer version;

    //逻辑删除
    @TableLogic
    @Excel(name = "是否有效")
    private Integer deleted;
}
